public final class ae
{

    private byte a[];
    private int b;
    private int c;

    public ae(byte abyte0[])
    {
        a = new byte[256];
        b = 0;
        c = 0;
        b(abyte0);
    }

    public final String toString()
    {
        return "RC4{" + b + ", " + c + "}";
    }

    private void b(byte abyte0[])
    {
        byte abyte1[] = a;
        for(int i = 0; i < 256; i++)
            abyte1[i] = (byte)i;

        b = 0;
        c = 0;
        int j = abyte0.length;
        int k = 0;
        for(int l = 0; l < 256; l++)
        {
            k = k + abyte1[l] + abyte0[l % j] & 0xff;
            byte byte0 = abyte1[l];
            abyte1[l] = abyte1[k];
            abyte1[k] = byte0;
        }

    }

    public final void a(byte abyte0[])
    {
        a(abyte0, 0, abyte0.length);
    }

    public final void a(byte abyte0[], int i, int j)
    {
        byte abyte1[] = a;
        int k = b;
        int l = c;
        for(int i1 = 0; i1 < j; i1++)
        {
            k = k + 1 & 0xff;
            l = l + abyte1[k] & 0xff;
            byte byte0 = abyte1[k];
            byte byte1 = abyte1[l];
            abyte1[k] = byte1;
            abyte1[l] = byte0;
            abyte0[i] = (byte)(abyte0[i] ^ abyte1[byte0 + byte1 & 0xff]);
            i++;
        }

        b = k;
        c = l;
    }

    public final byte a(byte byte0)
    {
        byte abyte0[] = a;
        int i = b = b + 1 & 0xff;
        int j = c = c + abyte0[i] & 0xff;
        byte byte1 = abyte0[i];
        byte byte2 = abyte0[j];
        abyte0[i] = byte2;
        abyte0[j] = byte1;
        return (byte)(byte0 ^ abyte0[byte1 + byte2 & 0xff]);
    }
}